אני משתמש בקוד הבא (במתודה במחלקה שלי):
preg_replace_callback($pattern, array($this, 'method'), $subject);

כמו שאפשר לראות, למתודה method שבמחלקה נשלח כפרמטר array שמכיל את ה-matches.

השאלה שלי היא, האם ניתן לשלוח אל method עוד פרמטרים כרצוני?
יש המון דיונים על זה בגוגל אך אין פתרון.


תודה מראש. (:

4 תשובות

avatar ענה intval ב 31 לדצמבר 2011 #

לא. אבל אם אתה רוצה, תקרא לפונקציה היא שהיא מטודה (לא סטטית) של המחלקה ואת המשתנים שאתה רוצה להעביר תשים בתור מאפייני המחלקה:

class a
{
  protected $is_uppercase = false;

  public function reg($subject)
  {
    if(true) $this->is_uppercase = true;
    return preg_replace_callback('#..#', array($this, 'callback'), $subject);
  }

  private function callback($matches)
  {
    $result = $matches[0];
    if($this->is_uppercase) $result = ucwords($result);
    return $result;
  }
}

avatar ענה iiddaannyy ב 31 לדצמבר 2011 #

מראה מסורבל אבל אני מבין שזה מה שיש כרגע, תודה אלכס. :)
נקווה שבגרסות הבאות יתקנו את זה.

avatar ענה intval ב 31 לדצמבר 2011 #

אני דווקא לא חושב שזה מסורבל או שיש פה משהו לתקן.
callback אמור לקבל את הפרמטרים שלו וזהו, זה המטרה של callback
שאר הדברים תעביר איך שאתה רוצה. אם אתה בכלל באמת בטוח שאתה רוצה :)

avatar ענה iiddaannyy ב 31 לדצמבר 2011 #

התכוונתי שאני מקווה שיוסיפו את האופציה. (:
בכל אופן, יחסית להעברה פשוטה של פרמטרים זה טיפה מסורבל לדעתי כי עדיף שתהיה אפשרות להוסיף פרמטרים באופן רגיל בלי כל מיני דרכים עקיפות, אבל לא משנה. ;)